<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>百度地图-批量坐标转换的顺序问题</title>
<script src="../js/baidu_map.js" type="text/javascript"></script>
<script src="../js/jquery-2.0.3.min.js" type="text/javascript"></script>
</head>
<body>
	<div id="map_container" style="height: 100px; width: 100px%;"></div>
</body>
</html>

<script type="text/javascript">
	//准备数据
	var oriPoints = [ {
		lng : 116.3786889372559,
		lat : 39.90762965106183,
		name : "p1",
		status : 1
	}, {
		lng : 116.38632786853032,
		lat : 39.90795884517671,
		name : "p2",
		status : 1
	}, {
		lng : 116.39534009082035,
		lat : 39.907432133833574,
		name : "p3",
		status : 1
	}, {
		lng : 116.40624058825688,
		lat : 39.90789300648029,
		name : "p4",
		status : 1
	}, {
		lng : 116.41413701159672,
		lat : 39.90795884517671,
		name : "p5",
		status : 1
	}, {
		lng : 116.42413701159671,
		lat : 39.90795884517671,
		name : "p6",
		status : 1
	}, {
		lng : 116.43413701159672,
		lat : 39.90795884517671,
		name : "p7",
		status : 1
	}, {
		lng : 116.44413701159672,
		lat : 39.90795884517671,
		name : "p8",
		status : 1
	}, {
		lng : 116.45413701159671,
		lat : 39.90795884517671,
		name : "p9",
		status : 1
	}, {
		lng : 116.46413701159672,
		lat : 39.90795884517671,
		name : "p10",
		status : 1
	}, {
		lng : 116.47413701159672,
		lat : 39.90795884517671,
		name : "p11",
		status : 1
	}, {
		lng : 116.48413701159672,
		lat : 39.90795884517671,
		name : "p12",
		status : 1
	}, {
		lng : 116.49413701159672,
		lat : 39.90795884517671,
		name : "p13",
		status : 1
	}, {
		lng : 116.50413701159673,
		lat : 39.90795884517671,
		name : "p14",
		status : 1
	}, {
		lng : 116.51413701159672,
		lat : 39.90795884517671,
		name : "p15",
		status : 1
	}, {
		lng : 116.52413701159672,
		lat : 39.90795884517671,
		name : "p16",
		status : 1
	}, {
		lng : 116.53413701159673,
		lat : 39.90795884517671,
		name : "p17",
		status : 1
	}, {
		lng : 116.54413701159672,
		lat : 39.90795884517671,
		name : "p18",
		status : 1
	}, {
		lng : 116.55413701159672,
		lat : 39.90795884517671,
		name : "p19",
		status : 1
	}, {
		lng : 116.56413701159671,
		lat : 39.90795884517671,
		name : "p20",
		status : 1
	}, {
		lng : 116.57413701159672,
		lat : 39.90795884517671,
		name : "p21",
		status : 1
	}, {
		lng : 116.58413701159672,
		lat : 39.90795884517671,
		name : "p22",
		status : 1
	}, {
		lng : 116.59413701159671,
		lat : 39.90795884517671,
		name : "p23",
		status : 1
	}, {
		lng : 116.60413701159672,
		lat : 39.90795884517671,
		name : "p24",
		status : 1
	}, {
		lng : 116.61413701159672,
		lat : 39.90795884517671,
		name : "p25",
		status : 1
	} ];//原始坐标组。有序。
	var markers = [];//标注的数组。
	var endPoints = [];//转换后的地图坐标。
	var gap = 10;//表示一组查几个。

	function add_over(map) {
		var len = oriPoints.length;
		var points = [];
		var ajaxId = 0;
		var i = 0;
		var j = 0;
		var ajaxLen = 0;

		for (; i < len; i++) {
			if (i % gap == 0) {
				ajaxId = Math.floor(i / gap);
				points[ajaxId] = [];
			}
			points[ajaxId].push(oriPoints[i]);
		}

		ajaxLen = points.length;
		for (; j < ajaxLen; j++) {
			(function() {
				var jj = j;
				//回调函数，添加marker。
				var callback = function(data) {
					var ajaxId = jj;
					var len = oriPoints.length, i, maker, label, theIcon;
					var base = ajaxId * gap;
					if (data.status === 0) {
						var dateLen = data.points.length;
						for (i = 0; i < dateLen; i++) {
							if (oriPoints[base + i].status != 1) {
								theIcon = icon_off;
							} else {
								theIcon = icon_on;
							}
							marker = new BMap.Marker(data.points[i], {
								icon : theIcon
							});
							label = new BMap.Label(oriPoints[base + i].name, {
								offset : new BMap.Size(20, 0)
							});
							label.setStyle({
								color : "white",
								fontSize : "18px",
								height : "20px",
								lineHeight : "20px",
								fontFamily : "楷体",
								border : "1px",
								backgroundColor : "#0072e3",
								borderRadius : "5px"
							});
							marker.setLabel(label);
							map.addOverlay(marker);
							markers[base + i] = marker;
							endPoints[base + i] = data.points[i];
						}
						if (oriPoints.length == endPoints.length) {//加载完毕。
							map.setViewport(endPoints);//设置中心点
						}
					}
					callback = null;//清理内存。
				}
				pos_trans(points[j], callback);//坐标转换新的数据图标添加到地图上。
			})();
		}
	}
	//坐标转换
	function pos_trans(points, callback) {
		var BdPoints = [], len = points.length, i;
		for (i = 0; i < len; i++) {
			BdPoints.push(new BMap.Point(points[i].lng, points[i].lat))
		}
		var convertor = new BMap.Convertor();
		convertor.translate(BdPoints, 1, 5, callback)
	}
	function map_init() {
		if (null == mapInst) {
			mapInst = baiduMapInit("map_container", [ 103.388611, 35.563611 ],
					5, "中国", "");
			mapInst.enableScrollWheelZoom();//滚轮放大缩小
			mapInst.addControl(new BMap.NavigationControl());
			mapInst.addControl(new BMap.OverviewMapControl());
			mapInst.addControl(new BMap.ScaleControl());
			mapInst.enableScrollWheelZoom();
			mapInst.addControl(new BMap.MapTypeControl());
			icon_on = new BMap.Icon("../station_on.png", new BMap.Size(20, 20));
			icon_off = new BMap.Icon("../station_off.png", new BMap.Size(20, 20));
		}
		add_over(mapInst)
	}
	//地图操作开始
	var mapInst = null;
	var icon_on = null;
	var icon_off = null;
	$().ready(function() {
		$("#map_container").height($(document).height() - 18);
		loadBaiduScript("map_init");
	});
</script>

